package com.example.Service.Impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.Service.AccountPrivacyService;
import com.example.entity.dto.AccountPrivacy;
import com.example.entity.vo.request.PrivacySaveVO;
import com.example.mapper.AccountPrivacyMapper;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.Optional;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author xusen
 * @since 2025-04-24
 */
@Service
public class AccountPrivacyServiceImpl extends ServiceImpl<AccountPrivacyMapper, AccountPrivacy> implements AccountPrivacyService {

    /**
     * 保存用户隐私设置
     *
     * @param id 用户ID，用于识别特定的用户
     * @param vo 包含用户隐私设置信息的视图对象，包括隐私类型和状态
     *
     * 此方法使用了@Transactional注解，确保用户隐私设置的更新在数据库中作为一个事务处理
     * 这意味着如果更新过程中的任何部分失败，那么整个更新操作将被回滚，以保持数据的一致性
     */
    @Override
    @Transactional
    public void savePrivacy(int id, PrivacySaveVO vo) {
        // 根据用户ID获取当前用户的隐私设置，如果不存在，则创建一个新的隐私设置对象
        AccountPrivacy privacy = Optional.ofNullable(this.getById(id)).orElse(new AccountPrivacy(id));
        // 获取隐私设置的状态
        boolean status = vo.isStatus();

        // 根据不同的隐私类型，设置相应的隐私状态
        switch (vo.getType()) {
            case "gender":
                privacy.setGender(status);
                break;
            case "phone":
                privacy.setPhone(status);
                break;
            case "email":
                privacy.setEmail(status);
                break;
            case "qq":
                privacy.setQq(status);
                break;
            case "wx":
                privacy.setWx(status);
        }

        // 保存或更新用户的隐私设置
        this.saveOrUpdate(privacy);
    }
    public AccountPrivacy accountPrivacy(int id) {
        return Optional.ofNullable(this.getById(id)).orElse(new AccountPrivacy(id));
    }
}
